package usuario.model;

import bibliinfo.FrameMain;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import usuario.model.Usuario;
import usuario.model.UsuarioDao;

public class ValidaUsuario {
    
    public boolean validaUser(JTextField JTRG, JTextField JTNome, JTextField JTCidade, JTextField JTCep, 
            JTextField JTBairro, JTextField JTRua, JTextField JTNumCasa, JTextField JTDia, JTextField JTMes, JTextField JTAno){
        boolean resp = true;
        String erroPadrao = "<html>É preciso preencher todos os campos com<b color=\"red\"> *</b></html>";
        String erroCaracteristica = "\n";        
        
        try{
            //usuario
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">RG</b> deve ter de 6 a 11 digitos</html>";           
            if (JTRG.getText().toString().length() < 6){                
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);                
                resp = false;
                return resp;
            }else{
                UsuarioDao userDao = new UsuarioDao();
                List<Usuario> listaUser = userDao.readA();
                for(Usuario user : listaUser){
                    if(JTRG.getText().equalsIgnoreCase(String.valueOf(user.getRg())) == true){
                        erroCaracteristica = "<html><b color=\"red\">RG</b> informado já esta cadastrado</html>";           
                        JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroCaracteristica, "Erro", 2);
                        return false;
                    }
                }
            }
             
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Nome</b> deve ter no mínimo 5 caracteres</html>";
            if(JTNome.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            //endereco
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Cidade</b> deve ter no mínimo 5 caracteres</html>";
            if(JTCidade.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            //verificando quantidade de caracteres
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Cep</b> deve ter 8 caracteres</html>";
            if((JTCep.getText().toString().length() < 8)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Bairro</b> deve ter no mínimo 5 caracteres</html>";
            if(JTBairro.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Rua</b> deve ter no mínimo 5 caracteres</html>";
            if(JTRua.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Número da Casa</b> é obrigatório</html>";
            if(JTNumCasa.getText().toString().length() < 1){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            //data
            erroCaracteristica = "\n\n<html>É preciso preencher a <b color=\"red\">Data de Nascimento</b> (Dia/Mês/Ano)</html>";            
            int data = Integer.parseInt(JTDia.getText());
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Dia da Data de Nascimento</b> só pode ter de 1 até 31 dias</html>";
            if((data < 1) || (data > 31)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }           
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Mês da Data de Nascimento</b> deve ter valores de 1 até 12</html>";
            int mes = Integer.parseInt(JTMes.getText());            
            if((mes < 1) || (mes > 12)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>É preciso preencher a <b color=\"red\">Data de Nascimento</b> (Dia/Mês/Ano)</html>";
            int ano = Integer.parseInt(JTAno.getText());            
            
            if((ano < 1900) || (ano >= Calendar.getInstance().get(Calendar.YEAR))){
                if(ano < 1900){
                    erroCaracteristica = "\n\n<html>Este <b color=\"red\">Ano para Data de Nascimento</b> não é válido</html>";
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                }else{
                    erroCaracteristica = "\n\n<html>O <b color=\"red\">Ano da Data de Nascimento</b> não pode ser maior ou igual ao atual</html>";
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                }
                resp = false;
                return resp;
            }            
            
        }catch(Exception e){
            JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
            resp = false;
            return resp;
        }        
        return resp;
    }
    
    public boolean validaUserUpdate(long rg, JTextField JTRG, JTextField JTNome, JTextField JTCidade, JTextField JTCep, 
            JTextField JTBairro, JTextField JTRua, JTextField JTNumCasa, JTextField JTDia, JTextField JTMes, JTextField JTAno){
        boolean resp = true;
        String erroPadrao = "<html>É preciso preencher todos os campos com<b color=\"red\"> *</b></html>";
        String erroCaracteristica = "\n";        
        
        try{
            //usuario
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">RG</b> deve ter de 6 a 11 digitos</html>";           
            if (JTRG.getText().toString().length() < 6){                
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);                
                resp = false;
                return resp;
            }else{
                UsuarioDao userDao = new UsuarioDao();
                List<Usuario> listaUser = userDao.readA();
                for(Usuario user : listaUser){
                    if((JTRG.getText().equalsIgnoreCase(String.valueOf(user.getRg())) == true)
                            && (JTRG.getText().equalsIgnoreCase(String.valueOf(rg)) == false)){
                        erroCaracteristica = "<html><b color=\"red\">RG</b> informado já esta cadastrado</html>";           
                        JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroCaracteristica, "Erro", 2);
                        return false;
                    }
                }
            }
             
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Nome</b> deve ter no mínimo 5 caracteres</html>";
            if(JTNome.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            //endereco
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Cidade</b> deve ter no mínimo 5 caracteres</html>";
            if(JTCidade.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            //verificando quantidade de caracteres
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Cep</b> deve ter 8 caracteres</html>";
            if((JTCep.getText().toString().length() < 8)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
                        
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Bairro</b> deve ter no mínimo 5 caracteres</html>";
            if(JTBairro.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Rua</b> deve ter no mínimo 5 caracteres</html>";
            if(JTRua.getText().toString().length() < 5){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Número da Casa</b> é obrigatório</html>";
            if(JTNumCasa.getText().toString().length() < 1){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            //data
            erroCaracteristica = "\n\n<html>É preciso preencher a <b color=\"red\">Data de Nascimento</b> (Dia/Mês/Ano)</html>";
            int data = Integer.parseInt(JTDia.getText());
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Dia da Data de Nascimento</b> só pode ter de 1 até 31 dias</html>";
            if((data < 1) || (data > 31)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }           
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Mês da Data de Nascimento</b> deve ter valores de 1 até 12</html>";
            data = Integer.parseInt(JTMes.getText());            
            if((data < 1) || (data > 12)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>É preciso preencher a <b color=\"red\">Data de Nascimento</b> (Dia/Mês/Ano)</html>";
            data = Integer.parseInt(JTAno.getText());            
            if((data < 1900) || (data >= Calendar.getInstance().get(Calendar.YEAR))){
                if(data < 1900){                    
                    erroCaracteristica = "\n\n<html>Este <b color=\"red\">Ano para Data de Nascimento</b> não é válido</html>";
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                }else{
                    erroCaracteristica = "\n\n<html>O <b color=\"red\">Ano da Data de Nascimento</b> não pode ser maior ou igual ao atual</html>";
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                }
                resp = false;
                return resp;
            }
            
        }catch(Exception e){
            JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
            resp = false;
            return resp;
        }        
        return resp;
    }
    
    public boolean validarAdd(JTextField jTDataCadDia, JTextField jTDataCadMes, JTextField jTDataCadAno, boolean suspenso,
             JTextField jTDataInicioDia, JTextField jTDataInicioMes, JTextField jTDataInicioAno, JTextField JTDataFimDia,
              JTextField jTDataFimMes, JTextField jTDataFimAno){
        
        boolean resp = true;
        String erroPadrao = "<html>É preciso preencher todos os campos com <b color=\"red\">*</b></html>";
        String erroCaracteristica = "\n";        
        try{
            //data de cadastro
            erroCaracteristica = "\n\n<html>É preciso preencher a <b color=\"red\">Data de Cadastro</b> (Dia/Mês/Ano)</html>";            
            int data = Integer.parseInt(jTDataCadDia.getText());
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Dia da Data de Cadastro</b> só pode ter de 1 até 31 dias</html>";
            if((data < 1) || (data > 31)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }     
            
            erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Mês da Data de Cadastro</b> deve ter valores de 1 até 12</html>";
            int mes = Integer.parseInt(jTDataCadMes.getText());            
            if((mes < 1) || (mes > 12)){
                JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                resp = false;
                return resp;
            }
            
            erroCaracteristica = "\n\n<html>É preciso preencher a <b color=\"red\">Data de Cadastro</b> (Dia/Mês/Ano)</html>";
            int ano = Integer.parseInt(jTDataCadAno.getText());            
            if((ano < 1900) || (ano >= Calendar.getInstance().get(Calendar.YEAR))){
                if(ano < 1900){                    
                    erroCaracteristica = "\n\n<html>Este <b color=\"red\">Ano para Data de Cadastro</b> não é válido</html>";
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }
                if (ano >= Calendar.getInstance().get(Calendar.YEAR)){                       
                    if((mes -1) > Calendar.getInstance().get(Calendar.MONTH)){
                        erroCaracteristica = "\n\n<html>O <b color=\"red\">Mes da Data de Cadastro</b> não pode ser maior que o atual</html>";
                        JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                        resp = false;
                        return resp;
                    }
                    if(data > Calendar.getInstance().get(Calendar.DATE)){
                        erroCaracteristica = "\n\n<html>Esta <b color=\"red\">Data de Cadastro</b> esta maior que o atual</html>";
                        JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                        resp = false;
                        return resp;
                    }                   
                }                
            }            
            /**
             As datas relacionadas a suspenções só seram apresentados se o usuário estiver suspenso estiver suspenso
             */
            if(suspenso == true){
                //data inicio multa
                erroCaracteristica = "\n\n<html>É preciso preencher o campo <b color=\"red\">Data Inicio Multa</b> (Dia/Mês/Ano)</html>";            
                data = Integer.parseInt(jTDataInicioDia.getText());
                erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Dia da Data Início Multa</b> só pode ter de 1 até 31 dias</html>";
                if((data < 1) || (data > 31)){
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }     

                erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Mês da Data Início Multa</b> deve ter valores de 1 até 12</html>";
                mes = Integer.parseInt(jTDataInicioMes.getText());            
                if((mes < 1) || (mes > 12)){
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }

                erroCaracteristica = "\n\n<html>É preciso preencher o campo <b color=\"red\">Data Início Multa</b> (Dia/Mês/Ano)</html>";
                ano = Integer.parseInt(jTDataInicioAno.getText());            
                if((ano < 1900) || (ano > Calendar.getInstance().get(Calendar.YEAR))){
                    if(ano < 1900){                    
                        erroCaracteristica = "\n\n<html>Este <b color=\"red\">Ano para Data Início Multa</b> não é válido</html>";
                        JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    }else{                    
                        erroCaracteristica = "\n\n<html>O <b color=\"red\">Ano para Data Início Multa</b> não pode ser maior que o atual</html>";
                        JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    }
                    resp = false;
                    return resp;
                }    
                
                Calendar cInicio = Calendar.getInstance();                
                cInicio.set(ano, mes, data);
                Date dataInicio = cInicio.getTime();
                
                //data fim multa
                erroCaracteristica = "\n\n<html>É preciso preencher o campo <b color=\"red\">Data Fim Multa</b> (Dia/Mês/Ano)</html>";            
                data = Integer.parseInt(JTDataFimDia.getText());
                erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Dia da Data Fim Multa</b> só pode ter de 1 até 31 dias</html>";
                if((data < 1) || (data > 31)){
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }     
                
                erroCaracteristica = "\n\n<html>O campo <b color=\"red\">Mês da Data Fim Multa</b> deve ter valores de 1 até 12</html>";
                mes = Integer.parseInt(jTDataFimMes.getText());            
                if((mes < 1) || (mes > 12)){
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }
                
                erroCaracteristica = "\n\n<html>É preciso preencher o campo <b color=\"red\">Data Fim Multa</b> (Dia/Mês/Ano)</html>";
                ano = Integer.parseInt(jTDataFimAno.getText());                            
                if(ano < 1900){                    
                    erroCaracteristica = "\n\n<html>Este <b color=\"red\">Ano para Data Fim Multa</b> não é válido</html>";
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }                             
                
                Calendar cFim = Calendar.getInstance();
                cFim.set(ano, mes, data);
                Date dataFim = cFim.getTime();
                erroCaracteristica = "\n\n<html>A Data Inicio Multa deve ser menor que a <b color=\"red\">Data Fim Multa</b></html>";
                if((dataInicio.compareTo(dataFim) == 1) || (dataInicio.compareTo(dataFim) == 0)){
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }
                
                Calendar cAtual = Calendar.getInstance();
                cAtual.set(cAtual.get(Calendar.YEAR), cAtual.get(Calendar.MONTH)+1, cAtual.get(Calendar.DAY_OF_MONTH));
                Date dataAtual = cAtual.getTime();
                erroCaracteristica = "\n\n<html>A <b color=\"red\">Data Fim Multa</b> não pode ser menor que a atual</html>";
                if(dataAtual.compareTo(dataFim) == 1){
                    System.out.println(cAtual.get(Calendar.YEAR));
                    System.out.println(cAtual.get(Calendar.MONTH));
                    System.out.println(cAtual.get(Calendar.DAY_OF_MONTH));
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }
                
                cInicio.add(Calendar.DAY_OF_MONTH, 60);
                Date dataFim_1 = cInicio.getTime();                
                erroCaracteristica = "\n\n<html>O <b color=\"red\">prazo  máximo</b> para multas é de 60 dias</html>";
                if(dataFim.compareTo(dataFim_1) == 1){                    
                    JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
                    resp = false;
                    return resp;
                }
                
            }            
        }catch(Exception e){
            JOptionPane.showMessageDialog(FrameMain.userFrameDados, erroPadrao+erroCaracteristica, "Erro", 2);
            resp = false;
            return resp;
        }
        return resp;
    }
}
